草庐IT

CountDownLatch和ExecutorService 线程池cachedThreadPool.submit

全部标签

c++ - 多线程在 C++ 中执行单个任务

假设我有这个big_task()函数,我可以在线程之间拆分以加快速度。用多线程解决这个问题的方法是在函数的每个任务上调用_beginthread()然后等待所有线程完成,对吧?我怎么知道这是否有效并真正有益于最小化big_task()运行时间?我还听说多线程效率取决于客户端的平台和硬件。这意味着它也是我需要在我的程序开始时查询的东西......?还有一个问题,在Windows中编码时,使用CreateThread()比使用_beginthread()更好吗?我编写跨平台应用程序,但如果CreateThread()比我可以专门化我的代码以在Windows中使用它更有效。

c++ - 在 C++ 中使用多线程进行快速排序

我使用多线程方法实现了一个quicksort程序,在C++中有一个Portfolio任务。Themethodofportfoliotasksistomaintainaqueueoftasks.Eachfreethreadpicksataskfromtheportfolio,executesit,ifnecessarygeneratingnewsubtasksandplacingthemintotheportfolio但我不确定什么是对的!在我看来,在一个thread中,该算法比两个或四个thread运行得更快。我能以某种方式搞乱同步吗?感谢任何人帮助我。代码:#include#incl

c++ - 启动一个作为该类私有(private)方法的守护线程?

我是C++11线程的新手,我正在尝试执行以下操作:classSomething{public:voidstart(){this->task_=std::thread(&Something::someTask,this);this->isRunning_=true;this->task_.detach();//Ireaddetachwillstopitfromhanging}voidstop(){this->isRunning=false;}~Something(){this->stop();}private:std::atomicisRunning_;std::threadtask_;

为什么大多数TCP服务器采用多线程,以及如何从头开始构建一个多线程的TCP服务器

目录前言了解TCP服务器设置TCP服务器接受客户端的连接读取并响应请求实现一个循环以进行连续操作Java举例结论前言TCP是一种在计算机网络中用于机器之间通信的最可靠的方法在本文中,我们将探讨一个Web服务器如何处理和为多个TCP连接提供服务为了更好地理解这个概念,我们将从头开始构建自己的服务器,使用原始的套接字进行编程在这个过程中,我们将深入了解系统调用、套接字编程以及它们的限制,并优化我们的方法以同时处理多个请求了解TCP服务器TCP服务器是在计算机上运行的一种常规进程,它通过监听特定的端口来实现TCP通信各种Web服务器,如ApacheTomcat、SpringBoot或Flask开发服

c++ - 如何检查线程是否已在 C++11 及更高版本中完成工作?

如何在C++11及更高版本中检查线程是否已完成工作?我一直在阅读文档并编写了以下代码:#include#includevoidmythread(){//dosomestuff}intmain(){std::threadfoo(mythread);if(foo.joinable()){foo.join();//dosomenextstuff}}joinable只告诉线程已经开始工作,但我想知道如何编写代码来检查线程是否完成工作。例如:#include#includevoidmythread(){//dosomestuff}intmain(){std::threadfoo(mythread

c++ - 在另一个线程中绘制 OpenGL

我已经为Windows创建了一个简单的OpenGL应用程序。它创建一个窗口,然后使用OpenGL命令在其上绘制一个三角形。这按预期工作。稍后我想将我的绘图代码封装到一个DLL中,这样它就可以在C#WinForms应用程序中用于绘制到WinForm。为此,我将绘图代码移到了单独的类和线程中。我的想法是,我可以将我的类“附加”到任何现有窗口并让我的线程绘制到它。可悲的是,事情似乎并没有那么简单。一旦我将窗口创建和绘制内容分离到不同的线程中,屏幕就会保持全黑。绘图调用似乎不再起作用。有没有办法让我的绘图完全独立于窗口创建和主UI线程?编辑:这是一些代码:-)这是我的渲染器(从UI线程调用时工

c++ - 带有信号量的线程安全单例问题

我写了一个简单的单例应用程序。下面是我的示例主类//ThreadsafeSingletonUsingSemaphore.cpp:Definestheentrypointfortheconsoleapplication.//#include"stdafx.h"#include#include#include"MySingleton.h"usingnamespacestd;inti=0;#defineTHREADCOUNT100DWORDWINAPIThreadProc(LPVOIDlParam);HANDLEg_semaphore=NULL;int_tmain(intargc,_TCHA

c++ - 数据成员线程和互斥体的初始化。错误的顺序是否有未定义的行为?

我偶然发现了一种我认为是在不知不觉中搬起石头砸自己脚的非常简单的方法。先介绍一下数据成员的初始化顺序就是数据成员声明的顺序。所以这是非法的:structA{std::size_ti_;std::size_tlength_;A(std::size_tlength):i_{length_}//UBhere.`length_`isuninitializedlength_{length}{}};因为数据成员length_在i_的初始化器中使用时是未初始化的。幸运的是,gcc和clang都对此给出了很好的警告。简单的解决方案是从参数初始化每个数据成员,即i_{length}。现在进入正题但是当它

c++ - 调试多线程应用程序

这个问题在这里已经有了答案:AnalyzingMultithreadedPrograms[closed](7个答案)关闭9年前。我有一个用C++和MFC编写的应用程序,它在Windows上运行多线程。有时我确实会收到一些投诉,例如死锁或由于这些线程而导致的未处理异常。通常我使用visualstudio(如果问题可重现)或者使用WinDbg来分析生成的转储文件。有没有更好的方法来做到这一点?我可以使用一些其他工具来执行此操作吗?

c++实现跨线程池取消

我有几个线程池,我希望我的应用程序处理取消操作。为此,我实现了一个共享操作Controller对象,我在调用的每个线程池工作函数中的不同位置轮询该对象。这是一个好的模型,还是有更好的方法?我只是担心所有这些operationController.checkState()散落在整个代码中。 最佳答案 是的,这是一个很好的方法。HerbSutter有一个nicearticle将其与替代方案(更差)进行比较。 关于c++实现跨线程池取消,我们在StackOverflow上找到一个类似的问题: